/**
 * 用于处方 drug item 的唯一ID计数器
 */
let drugIdCounter = 100;

/**
 * @description 获取 Mock 咨询详情数据
 */
const getMockConsultationData = (consultationId = 'C20251126001') => {
    return {
        // 顶部患者信息
        patientInfo: {
            avatarUrl: '/images/mock_avatar.png', // 请替换为实际路径
            name: '李小美',
            gender: '女',
            age: 28,
            consultationId: consultationId,
            status: '处理中', // 咨询状态
            isUrgent: true
        },
        // 患者主诉
        chiefComplaint: {
            time: '2025-11-26 10:30',
            description: '最近一周，右上侧的智齿开始隐隐作痛，尤其在吃东西的时候。偶尔会觉得牙龈肿胀，刷牙时有出血现象。想请医生看看是否需要拔除或进行其他治疗。',
            attachments: [
                { url: '/images/mock_xray1.jpg', type: 'image', name: '智齿X光片' },
                { url: '/images/mock_photo1.jpg', type: 'image', name: '患牙照片' }
            ]
        },
        // 诊疗/对话记录 (Timeline)
        records: [
            { type: 'patient', content: '医生您好，我的牙齿情况比较复杂，照片已经上传了，麻烦您看一下。', time: '10:35' },
            { type: 'doctor', content: '您好，我已经查看了照片。初步判断是智齿冠周炎，近期有没有发烧或淋巴结肿大的情况？', time: '10:50' },
            {
                type: 'prescription',
                name: '急性智齿冠周炎用药处方',
                drugs: [
                    { name: '甲硝唑片', dosage: '200mg', frequency: '3次/日', duration: '5天' },
                    { name: '阿莫西林胶囊', dosage: '500mg', frequency: '2次/日', duration: '5天' }
                ],
                advice: '用药期间忌辛辣，多饮水。',
                time: '11:10'
            },
            { type: 'diagnosis', diagnosis: '右下颌阻生智齿冠周炎（#48），急性期。', advice: '建议先行消炎治疗，炎症控制后择期拔除。', time: '11:30' }
        ],

        // 常用语 Mock 数据 (作为后备或默认数据，实际以 localPhrases 为准)
        commonPhrases: [
            '请您拍摄清晰的患牙照片，并标注疼痛位置。',
            '请问您最近有没有伴随发烧或头痛的症状？',
            '您好，根据您的描述，建议您尽快到院做进一步检查。',
            '这可能是牙髓炎，建议您进行根管治疗。'
        ],

        // 状态管理：结构化诊断表单数据
        diagnosisForm: {
            currentDiagnosis: '',
            treatmentPlan: ''
        },
        // 状态管理：电子处方表单数据
        prescriptionForm: {
            name: '',
            drugs: [{ id: drugIdCounter++, name: '', dosage: '', frequency: '', duration: '' }],
            advice: ''
        },
        // 状态管理：当前输入内容
        inputContent: '',
    };
};

Page({
    data: {
        consultationData: null,
        activePanel: 0, // 底部浮动区当前显示哪个面板：0-无, 1-诊断, 2-处方, 3-常用语, 4-更多
        localPhrases: [], // 用于存储从管理中心同步的常用语
    },

    onLoad: function (options) {
        const mockData = getMockConsultationData(options.id);
        this.setData({
            consultationData: mockData
        });
    },

    onShow: function () {
        // 每次进入或返回本页面时，同步更新常用语数据（从本地缓存加载）
        // 如果缓存没有，使用 Mock 数据
        const cachedPhrases = wx.getStorageSync('customCommonPhrases');
        let initialPhrases = [];

        // 健壮性检查：确保 consultationData 已经初始化
        if (this.data.consultationData && this.data.consultationData.commonPhrases) {
            initialPhrases = this.data.consultationData.commonPhrases;
        }

        this.setData({
            // 确保如果缓存为空，使用的是初始化数据
            localPhrases: cachedPhrases && cachedPhrases.length > 0 ? cachedPhrases : initialPhrases,
        });
    },

    // --- 通用输入与面板控制 ---

    /** 消息输入框内容同步 */
    handleInput: function (e) {
        this.setData({
            'consultationData.inputContent': e.detail.value
        });
    },

    /** 发送普通聊天消息 (已修复) */
    /** 关键修改：发送普通聊天消息，并触发自动回复 */
    sendMessage: function () {
        const content = this.data.consultationData.inputContent.trim();
        if (!content) return;

        const doctorRecord = {
            type: 'doctor',
            content: content,
            time: new Date().toLocaleTimeString('zh-CN', { hour: '2-digit', minute: '2-digit' })
        };

        // 1. 立即更新界面：添加医生的消息记录
        this.setData({
            'consultationData.records': [...this.data.consultationData.records, doctorRecord],
            'consultationData.inputContent': '' // 清空输入框
        });

        // 2. 触发患者自动回复
        this.simulatePatientReply(content);

        wx.showToast({ title: '消息已发送', icon: 'success' });
        // TODO: 实际业务中应在此处调用API发送消息
    },

    /** 新增函数：模拟患者自动回复 */
    simulatePatientReply: function (doctorMessage) {
        // 定义自动回复内容列表
        const autoReplies = [
            '好的，医生，我明白了。我会按照您的指示去做。',
            '谢谢您，医生！请问我需要注意些什么吗？',
            '嗯，感觉好多了。您说的药物我准备去购买。',
            '我现在马上按照您说的操作，稍后给您反馈。',
            '（患者正在打字...）'
        ];

        let replyContent;

        // 简单逻辑：根据医生的消息内容或随机选择回复
        if (doctorMessage.includes('预约') || doctorMessage.includes('排班')) {
            replyContent = '好的，我去看一下您的排班时间，稍后给您留言。';
        } else if (doctorMessage.includes('药') || doctorMessage.includes('处方')) {
            replyContent = '药品我已经收到了，非常感谢！';
        } else {
            // 随机选择一个回复
            const randomIndex = Math.floor(Math.random() * autoReplies.length);
            replyContent = autoReplies[randomIndex];
        }

        const patientRecord = {
            type: 'patient',
            content: replyContent,
            time: new Date().toLocaleTimeString('zh-CN', { hour: '2-digit', minute: '2-digit' })
        };

        // 模拟网络延迟和患者打字时间，2秒后自动回复
        setTimeout(() => {
            this.setData({
                'consultationData.records': [...this.data.consultationData.records, patientRecord]
            });
            // 可以在此处添加提示，例如：wx.showToast({ title: '患者有新回复', icon: 'none', duration: 1500 });
        }, 2000);
    },

    /** 切换底部功能面板 */
    togglePanel: function (e) {
        const targetPanel = parseInt(e.currentTarget.dataset.panel) || 0;
        const newActivePanel = (this.data.activePanel === targetPanel) ? 0 : targetPanel;
        this.setData({
            activePanel: newActivePanel
        });
    },

    // --- 常用语逻辑 ---

    /** 使用常用语，追加到输入框 */
    usePhrase: function (e) {
        const phrase = e.currentTarget.dataset.phrase;
        const currentInput = this.data.consultationData.inputContent;
        this.setData({
            'consultationData.inputContent': currentInput + phrase,
            activePanel: 0
        });
    },

    /** 跳转到常用语管理中心 */
    goToPhraseManager: function () {
        this.setData({ activePanel: 0 }); // 先关闭浮动面板
        wx.navigateTo({
            url: '/pages/doctor/commonPhraseManager/commonPhraseManager' // 确保路径正确
        });
    },

    // --- 预约/排班对接逻辑 (Panel 4) ---

    /** 引导患者跳转到预约排班页面 */
    goToBooking: function () {
        this.setData({ activePanel: 0 }); // 关闭面板

        // 实际业务中，此处应携带医生ID和患者ID跳转到预约系统
        wx.navigateTo({
            url: `/pages/booking/booking?doctorId=123&patientId=${this.data.consultationData.patientInfo.consultationId}`
        });

        // 模拟发送一条预约引导消息，作为记录
        const bookingMessage = `医生已为您发起预约引导，请点击下方链接查看我的排班，并选择就诊时间：[预约链接]`;
        const newRecord = {
            type: 'doctor',
            content: bookingMessage,
            time: new Date().toLocaleTimeString('zh-CN', { hour: '2-digit', minute: '2-digit' })
        };
        this.setData({
            'consultationData.records': [...this.data.consultationData.records, newRecord]
        });
        wx.showToast({ title: '预约链接已发送', icon: 'success' });
    },


    // --- 结构化诊断逻辑 (保持不变) ---
    submitDiagnosis: function () {
        const form = this.data.consultationData.diagnosisForm;
        if (!form.currentDiagnosis || !form.treatmentPlan) {
            wx.showToast({ title: '请填写完整诊断和方案', icon: 'none' });
            return;
        }

        const newRecord = {
            type: 'diagnosis',
            diagnosis: form.currentDiagnosis,
            advice: form.treatmentPlan,
            time: new Date().toLocaleTimeString('zh-CN', { hour: '2-digit', minute: '2-digit' })
        };

        this.setData({
            'consultationData.records': [...this.data.consultationData.records, newRecord],
            activePanel: 0, // 关闭面板
            'consultationData.diagnosisForm.currentDiagnosis': '',
            'consultationData.diagnosisForm.treatmentPlan': ''
        });
        wx.showToast({ title: '诊断记录已提交', icon: 'success' });
        // TODO: 调用API保存诊断记录
    },

    handleDiagnosisInput: function (e) {
        const field = e.currentTarget.dataset.field;
        this.setData({
            [`consultationData.diagnosisForm.${field}`]: e.detail.value
        });
    },

    // --- 电子处方逻辑 (保持不变) ---
    handlePrescriptionInput: function (e) {
        const { field, index, subfield } = e.currentTarget.dataset;
        const value = e.detail.value;

        if (field === 'drugs') {
            const drugs = this.data.consultationData.prescriptionForm.drugs;
            if (drugs[index]) {
                drugs[index][subfield] = value;
            }
            this.setData({ 'consultationData.prescriptionForm.drugs': drugs });
        } else {
            this.setData({ [`consultationData.prescriptionForm.${field}`]: value });
        }
    },

    addDrug: function () {
        const drugs = this.data.consultationData.prescriptionForm.drugs;
        drugs.push({ id: drugIdCounter++, name: '', dosage: '', frequency: '', duration: '' });
        this.setData({ 'consultationData.prescriptionForm.drugs': drugs });
    },

    removeDrug: function (e) {
        const index = e.currentTarget.dataset.index;
        const drugs = this.data.consultationData.prescriptionForm.drugs;
        drugs.splice(index, 1);
        this.setData({ 'consultationData.prescriptionForm.drugs': drugs });
    },

    submitPrescription: function () {
        const form = this.data.consultationData.prescriptionForm;
        const validDrugs = form.drugs.filter(d => d.name && d.dosage);
        if (!form.name || validDrugs.length === 0) {
            wx.showToast({ title: '请填写处方名称和至少一种有效药物', icon: 'none' });
            return;
        }

        const newRecord = {
            type: 'prescription',
            name: form.name,
            drugs: validDrugs,
            advice: form.advice,
            time: new Date().toLocaleTimeString('zh-CN', { hour: '2-digit', minute: '2-digit' })
        };

        this.setData({
            'consultationData.records': [...this.data.consultationData.records, newRecord],
            activePanel: 0,
            'consultationData.prescriptionForm': {
                name: '', drugs: [{ id: drugIdCounter++, name: '', dosage: '', frequency: '', duration: '' }], advice: ''
            }
        });
        wx.showToast({ title: '电子处方已发送', icon: 'success' });
        // TODO: 调用API保存并发送处方
    },


    // --- 其他原有功能 (保持不变) ---
    endConsultation: function () {
        wx.showModal({
            title: '结束咨询',
            content: '确定要结束本次咨询吗？结束后将不可再发送消息。',
            success: (res) => {
                if (res.confirm) {
                    this.setData({
                        'consultationData.patientInfo.status': '已结束'
                    });
                    wx.showToast({ title: '咨询已结束', icon: 'success' });
                    // TODO: 调用API更新状态
                }
            }
        });
    },

    markAsUrgent: function () {
        const isUrgent = !this.data.consultationData.patientInfo.isUrgent;
        this.setData({
            'consultationData.patientInfo.isUrgent': isUrgent
        });
        wx.showToast({ title: isUrgent ? '已标记为紧急' : '已取消紧急标记', icon: 'none' });
    },

    previewAttachment: function (e) {
        const { url } = e.currentTarget.dataset;
        const urls = this.data.consultationData.chiefComplaint.attachments.map(a => a.url);
        wx.previewImage({ current: url, urls: urls });
    }
});